#pragma

#include <iostream>
#include <cstdio>
#include <cstdarg>
#include <ctime>
#include <string>

//日志等级
#define DEBUG   0
#define NORMAL  1
#define WARNING 2
#define ERROR   3
#define FATAL   4

#define SIZE 1024
//const char*类型元素的数组
const char *gLevelMap[]={//1.日志等级
    "DEBUG",
    "NORMAL",
    "WARNING",
    "ERROR",
    "FATAL"
};


//日志功能：1.日志等级 2.日志时间 3.支持用自定义(日志内容，文件行，文件名)
void logMessage(int level,const char* format,...)
{
#ifndef DEBUG_SHOW //如果没定义DEBUG_SHOW,则表明不需要DEBUG调试展示，则会读取到这里，就不会展示以下的日志功能提供的各种信息。
    if(level==DEBUG) return; //DEBUG调试
    
#endif//如果定义了DEBUG_SHOW,则表面需要DEBUG调试展示，则会读取到这里，就会展示以下的日志功能提供的各种信息

    char  stdBuffer[SIZE];//标准信息部分
    time_t timestamp=time(nullptr);//2.日志时间

    //把后面的内容打印到前面的字符串里。该函数专门为打印到字符设置的
    snprintf(stdBuffer,sizeof stdBuffer,"[%s] [%ld]",gLevelMap[level],timestamp);//将 日志时间 和 日志等级 添加到标准信息部分中


    //ps:待学
    char logBuffer[SIZE];//标准信息部分
    va_list args;
    va_start(args,format);
    //vprintf(format,args);

    vsnprintf(logBuffer,sizeof logBuffer,format,args);
    va_end(args);

    printf("%s%s\n",stdBuffer,logBuffer);
}